/********************************************************************* * * Copyright (C) 2002 Andrew Khan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***************************************************************************/ package jxl.biff; import jxl.common.Logger; import jxl.Cell; import jxl.Range; import jxl.Sheet; /** * Implementation class for the Range interface. This merely * holds the raw range information, and when the time comes, it * interrogates the workbook for the object. * This does not keep handles to the objects for performance reasons, * as this could impact garbage collection on larger spreadsheets */ public class RangeImpl implements Range { /** * The logger */ private static Logger logger = Logger.getLogger(RangeImpl.class); /** * A handle to the workbook */ private WorkbookMethods workbook; /** * The sheet index containing the column at the top left */ private int sheet1; /** * The column number of the cell at the top left of the range */ private int column1; /** * The row number of the cell at the top left of the range */ private int row1; /** * The sheet index of the cell at the bottom right */ private int sheet2; /** * The column index of the cell at the bottom right */ private int column2; /** * The row index of the cell at the bottom right */ private int row2; /** * Constructor * @param w the workbook * @param es the external sheet * @param s1 the sheet of the top left cell of the range * @param c1 the column number of the top left cell of the range * @param r1 the row number of the top left cell of the range * @param s2 the sheet of the bottom right cell * @param c2 the column number of the bottom right cell of the range * @param r2 the row number of the bottomr right cell of the range */ public RangeImpl(WorkbookMethods w, int s1, int c1, int r1, int s2, int c2, int r2) { workbook = w; sheet1 = s1; sheet2 = s2; row1 = r1; row2 = r2; column1 = c1; column2 = c2; } /** * Gets the cell at the top left of this range * * @return the cell at the top left */ public Cell getTopLeft() { Sheet s = workbook.getReadSheet(sheet1); if (column1 < s.getColumns() && row1 < s.getRows()) { return s.getCell(column1, row1); } else { return new EmptyCell(column1, row1); } } /** * Gets the cell at the bottom right of this range * * @return the cell at the bottom right */ public Cell getBottomRight() { Sheet s = workbook.getReadSheet(sheet2); if (column2 < s.getColumns() && row2 < s.getRows()) { return s.getCell(column2, row2); } else { return new EmptyCell(column2, row2); } } /** * Gets the index of the first sheet in the range * * @return the index of the first sheet in the range */ public int getFirstSheetIndex() { return sheet1; } /** * Gets the index of the last sheet in the range * * @return the index of the last sheet in the range */ public int getLastSheetIndex() { return sheet2; } }